package py.com.erpone.session.dm;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateful;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;

import org.primefaces.context.RequestContext;
import org.primefaces.event.RowEditEvent;

import py.com.erpone.entity.dm.Cotizacion_pedido_list;
import py.com.erpone.entity.dm.FormaPago;
import py.com.erpone.entity.dm.Producto;
import py.com.erpone.entity.dm.Proveedor;
import py.com.erpone.entity.dm.SolicitudCotizacion;
import py.com.erpone.entity.dm.SolicitudPedido;
import py.com.erpone.entity.dm.SolicitudPedidoDetalle;
import py.com.erpone.entity.dm.Usuario;
import py.com.erpone.session.dm.list.ProductoList;
import py.com.erpone.session.dm.list.ProveedorList;
import py.com.erpone.session.dm.list.SolicitudPedidoList;
import py.com.erpone.util.LocaleSelector;
import py.com.erpone.view.datamodel.ProductoDataModel;
import py.com.erpone.view.datamodel.ProveedorDataModel;
import py.com.erpone.view.datamodel.SolicitudCotizacionModel;
import py.com.erpone.view.datamodel.SolicitudPedidoModel;

@Stateful
@Named
@LocalBean
@ConversationScoped
public class SolicitudCotizacionBean {
	

	@PersistenceContext(type = PersistenceContextType.EXTENDED)
	private EntityManager em;

	@Inject
	LocaleSelector localeSelector;
	@Inject
	private Conversation conversation;
    
	private SolicitudCotizacion solicitudCotizacion;
	
	private SolicitudPedidoModel solicitudPedidoModel;
	
	private List<SolicitudPedido> pedidos;
	/*-----------------------------------------------------------*/
	//private double sum = 0;
	/*-----------------------------------------------------------*/
	//private Cotizacion_pedido_list cotizacion_pedido_list;
	
	
	
	@Inject
	private SolicitudPedidoList solicitudPedidoList;
	@PostConstruct
	public void postConstruct() {
		if (conversation.isTransient())
			conversation.begin();	
		solicitudCotizacion = new SolicitudCotizacion ();
		solicitudCotizacion.setProveedor(new Proveedor());
		solicitudCotizacion.setSolicitudPedido(new SolicitudPedido());
		solicitudPedidoModel = new SolicitudPedidoModel(solicitudPedidoList.findAll());
		pedidos = new ArrayList<SolicitudPedido> ();
		//cotizacion_pedido_list=new Cotizacion_pedido_list();
	}
	
	/*public Cotizacion_pedido_list getCotizacion_pedido_list() {
		return cotizacion_pedido_list;
	}

	public void setCotizacion_pedido_list(
			Cotizacion_pedido_list cotizacion_pedido_list) {
		this.cotizacion_pedido_list = cotizacion_pedido_list;
	}*/
	
	
	
	public List<SolicitudPedido> getPedidos() {
		return pedidos;
	}

	public void setPedidos(List<SolicitudPedido> pedidos) {
		this.pedidos = pedidos;
	}

	
	public SolicitudCotizacion getSolicitudCotizacion() {
		return solicitudCotizacion;
	}
	public String getSituacionExtenso(String key, HashMap<String, String> listSituacion) {
		String retorno = key;
		Map<String, String> map = listSituacion;
		for (Map.Entry<String, String> entry : map.entrySet()){
			if(key.equals(entry.getKey()))
				retorno = localeSelector.getMensaje("situacion."+entry.getKey());
		}		
		return retorno;
	}



	public void setSolicitudCotizacion(SolicitudCotizacion solicitudCotizacion) {
		this.solicitudCotizacion = solicitudCotizacion;
	}

	public SolicitudPedidoModel getSolicitudPedidoModel() {
		return solicitudPedidoModel;
	}

	public void setSolicitudPedidoModel(SolicitudPedidoModel solicitudPedidoModel) {
		this.solicitudPedidoModel = solicitudPedidoModel;
	}

	public SolicitudPedidoList getSolicitudPedidoList() {
		return solicitudPedidoList;
	}

	public void setSolicitudPedidoList(SolicitudPedidoList solicitudPedidoList) {
		this.solicitudPedidoList = solicitudPedidoList;
	}
	

	public void iniciar() {
		
	}
	

	public void iniciar2(SolicitudCotizacion solicitudCotizacion) {
		if (conversation.isTransient())
			conversation.begin();
		this.solicitudCotizacion=solicitudCotizacion;
		if (solicitudCotizacion.getSituacion().equals("F")) {
			 RequestContext rc = RequestContext.getCurrentInstance();
			 rc.execute("dlgsolcot.hide()"); 
		        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, localeSelector.getMensaje("solicitud_noModificacionCotiz"), solicitudCotizacion.getSituacion()));
		        if (!conversation.isTransient())
					conversation.end();
		}
	}
	public void iniciarDetail(SolicitudCotizacion solicitudCotizacion) {
		if (conversation.isTransient())
			conversation.begin();
		this.solicitudCotizacion=solicitudCotizacion;		
	}

	public void guardar() {
		System.out.println("Proveedor: "+solicitudCotizacion.getProveedor());
//	   if(solicitudCotizacion.getSolicitudPedido().get != null){	
		for(SolicitudPedidoDetalle detail: solicitudCotizacion.getSolicitudPedido().getSolicitudPedidosDetalle()){
			if (detail.getId() != null){
				em.merge(detail);
			}
		}
		solicitudCotizacion.setSituacion(SolicitudCotizacion.SITUACION_ADJUDICADO);
		if (solicitudCotizacion.getId() == null){
			em.persist(solicitudCotizacion);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("comun.exito.creado"), null));	           
		}else{
			em.merge(solicitudCotizacion);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("comun.exito.actualizado"), null));	           
		}
		if (!conversation.isTransient())
			conversation.end();
		solicitudCotizacion.getSolicitudPedido().setSituacion(SolicitudPedido.SITUACION_ADJUDICADO);
		em.merge(solicitudCotizacion.getSolicitudPedido());	   
//	   RequestContext rc = RequestContext.getCurrentInstance();
//	   rc.execute("dlgsolcot.hide()"); 
//	   RequestContext.getCurrentInstance().update(":formPrincipal,:form1");
//	   }else{
//           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, localeSelector.getMensaje("proveedor_error"), null));
//	   }
	}

	public void eliminar(SolicitudCotizacion solicitudCotiz) {
		
		if (solicitudCotiz.getSituacion().equals("F")) {
			 RequestContext rc = RequestContext.getCurrentInstance();
			 rc.execute("dlgsolcot.hide()"); 
		        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, localeSelector.getMensaje("solicitud_noEliminacionCotiz"), solicitudCotizacion.getSituacion()));		
		}else{
			em.remove(em.merge(solicitudCotiz));
		}
		if (!conversation.isTransient())
			conversation.end();

	}

	public void cancelar() {
		if (!conversation.isTransient())
			conversation.end();
	}

	/*public Double obtenerSubTotal(SolicitudPedidoDetalle solicitud){
		Double subtotal= solicitud.getCantidad()*solicitud.getPrecioUnitario();
		solicitudCotizacion.getSolicitudPedido().getSolicitudPedidosDetalle();
		return subtotal;
	}*/
	public void obtenerSubTotal(RowEditEvent event ) { 
		double sum = 0;
      
		((SolicitudPedidoDetalle)event.getObject()).setSubtotal(((SolicitudPedidoDetalle)event.getObject()).getCantidad()*((SolicitudPedidoDetalle)event.getObject()).getPrecioUnitario());
		//this.sum+=((SolicitudPedidoDetalle)event.getObject()).getCantidad()*((SolicitudPedidoDetalle)event.getObject()).getPrecioUnitario();
		for(SolicitudPedidoDetalle detalle: solicitudCotizacion.getSolicitudPedido().getSolicitudPedidosDetalle()){
			sum+=detalle.getSubtotal();
			System.out.println(detalle.getSubtotal());
		}
		System.out.println("Suma: "+sum);
		solicitudCotizacion.setPrecio(sum);
		System.out.println("Precio: "+solicitudCotizacion.getPrecio());

    }  
}
